#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef string vextype;
const int n = 4;
typedef struct 
{
    vextype vexs[n];
    int arcs[n][n];
    int vexnum, arcnum;
} AMGraph;

void creategraph(AMGraph &G){
    cin >> G.vexnum >> G.arcnum;
    for (int i = 0; i < G.vexnum; i ++)
        cin >> G.vexs[i];
    for (int i = 0; i < G.vexnum; i ++){
        for (int j = 0; j < G.vexnum; j ++){
            G.arcs[i][j] = INT_MAX;
        }
    }

    for(int k = 0; k < G.arcnum; k ++){
        int i, j, w;
        cin >> i >> j >> w;
        G.arcs[i][j] = w;
        G.arcs[j][i] = w;
    }

}
int main(int argc, char const *argv[])
{
    AMGraph G;
    creategraph(G);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (G.arcs[i][j] >= INT_MAX){
                cout << "INF ";
            }else{
                cout << G.arcs[i][j] << " ";
            }
            
        }
        cout << endl;
    }
    
    return 0;
}
// 4 4
// A B C D
// 0 1 5
// 0 2 7
// 0 3 9
// 2 3 1
// INF 5 7 9
// 5 INF INF INF
// 7 INF INF 1
// 9 INF 1 INF
